home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 701-725 / 706 / aush / aush.doc < prev    next >
Text File  |  1995-03-18  |  37KB  |  809 lines

  1.  
  2.                AUSH - Manuel de référence
  3.  
  4.  
  5.  
  6.  
  7.  
  8.   1. Avertissement
  9.  
  10.       Ce manuel décrit la version  1.40  de  l'interpréteur  de  commandes
  11.   AUSH. Ce programme est placé dans le domaine public, avec autorisation de le
  12.   copier librement et de le diffuser par n'importe quels moyens,  à  condition
  13.   que  le  produit  soit  diffusé  dans  son  intégralité,  et     sans    aucune
  14.   modification.  AUSH  est  (c)1992  par  Denis  GOUNELLE,  toute  utilisation
  15.   commerciale  ou  vente  de  ce  programme  sans  autorisation   écrite   est
  16.   STRICTEMENT INTERDITE.
  17.       Malgré de nombreux tests, je ne peux garantir  qu'AUSH  ne  contient
  18.   aucune erreur. VOUS UTILISEZ CE PROGRAMME A VOS RISQUES  ET  PERILS.    Je  ne
  19.   pourrai en aucun cas être  tenu  responsable    de  tout  dommage,  direct  ou
  20.   indirect, résultant de l'utilisation d'AUSH.
  21.  
  22.   2. Introduction
  23.  
  24.       AUSH (Amiga Ultimate SHell) est  un  interpréteur  de  commande  (ou
  25.   "shell") écrit pour l'Amiga, et destiné à remplacer entièrement le shell  de
  26.   Commodore. Il s'inspire de tous les shells que j'ai utilisé jusqu'ici, aussi
  27.   bien sous UNIX (sh, csh, et surtout tcsh 6.00.03) que sur Amiga (AShell  1.3
  28.   et Csh 4.01A), tout en intégrant de  nombreuses  idées  personnelles    et  en
  29.   gardant la plus grande compatibilité possible avec les shells  Commodore  et
  30.   ARP.
  31.  
  32.       Vous êtes invités à me donner votre avis (critiques et  suggestions)
  33.   sur ce programme, en m'écrivant à l'adresse suivante :
  34.  
  35.                    M. GOUNELLE Denis
  36.                     Boite 71
  37.                   6, rue des cailloux
  38.                  92110 CLICHY - FRANCE
  39.  
  40.       L'éditeur de ligne de commande a été écrit à partir de celui de  Csh
  41.   v4.02A (par Mattew DILLON/Steve DREW/Carlo BORREO & Cesare DIENI).
  42.       Merci à Pierre ARDICHVILI, Jean-Yves PROUX, Jean-Philippe  RAPP,  et
  43.   Michel SCHINZ pour leurs tests et leurs suggestions. Merci également à Josef
  44.   EGLOFF pour la traduction des messages d'erreur en allemand.
  45.  
  46.   3. Installation
  47.  
  48.       Si votre Amiga dispose du système 1.3, vous devez d'abord  installer
  49.   la librairie ARP, si ce n'est déjà fait, en copiant le fichier "arp.library"
  50.   dans le répertoire "LIBS:".
  51.       Copiez ensuite les fichiers "AUSH" (le shell lui-même) et  "NewAUSH"
  52.   (commande pour lancer un nouveau shell) dans le répertoire "C:".  Notez  que
  53.   AUSH et NewAUSH sont écrits en code ré-entrant, et peuvent donc parfaitement
  54.   être rendus résidents.
  55.  
  56.   4. La commande NewAUSH
  57.  
  58.       Cette commande est l'équivalent des commandes "NewCLI" et "NewShell"
  59.   du shell de Commodore. Elle ne fonctionnera que si le  programme  "AUSH"  se
  60.   trouve dans le chemin d'accès défini par la commande "Path". Pour lancer  un
  61.   nouveau shell, depuis la ligne de commande, tapez :
  62.  
  63.                NewAUSH [spécification de fenêtre]
  64.  
  65.             exemple : NewAUSH CON:0/11/640/180/AUSH
  66.  
  67.       Pour lancer un nouveau shell depuis le WorkBench, créez une icône de
  68.   type "Project". Indiquez éventuellement une taille de pile  (champ  "STACK")
  69.   et  une  spécification  de  fenêtre  (champ  "TOOL  TYPE",  sous  la   forme
  70.   "WINDOW=spécification"). N'oubliez pas de mettre le chemin d'accès à NewAUSH
  71.   dans le champ "DEFAULT TOOL".
  72.  
  73.   5. Notions de base
  74.  
  75.       Lorsque vous    lancez    AUSH,  un  message  indiquant  la  version  du
  76.   programme apparait, suivit d'une chaine d'invite (ou "prompt"). Par  défaut,
  77.   cette chaine indique le numéro du shell, suivit du  répertoire  courant.  Le
  78.   shell attend alors vos commandes.
  79.  
  80.       Une commande simple  est  une  suite    de  mots  séparés  par    un  ou
  81.   plusieurs espaces. Le premier mot indique la commande  à  exécuter,  et  les
  82.   autres sont les arguments à passer à cette commande.    La  longueur  maximale
  83.   d'une ligne de commande est de 256 caractères dans  le  cas  d'une  commande
  84.   externe.
  85.       Si  le  premier  mot    correspond  à  un   alias,   la   substitution
  86.   correspondante est effectuée. Cela continue tant que c'est possible, ce  qui
  87.   veut dire qu'un alias  peut  être  défini  en  fonction  d'un  autre.  Notez
  88.   cependant qu'il n'y a pas de contrôle de récursivité des  définitions.  Vous
  89.   pouvez désactiver la substitution des alias en  ajoutant  le    caractère  "\"
  90.   devant le nom de la commande (par exemple "\ls df0:")
  91.       AUSH examine également les arguments, et remplace  certains  d'entre
  92.   eux en fonction des règles suivantes :
  93.  
  94.       ;       tout ce qui suit est un commentaire, et est ignoré.
  95.       ^car      remplacé par "CTRL-car" si "car"  est  une  lettre,  par
  96.           "car" sinon.
  97.       =n      remplacé par le  n-ième  répertoire  dans  la  pile  des
  98.           répertoires.
  99.       $var      remplacé par la valeur de la    variable  "var"  (cherchée
  100.           d'abord  dans  les  variables  locales,  puis  dans  les
  101.           variables  globales,    et  enfin   dans   les     variables
  102.           ARP/Commodore et Manx) ou par une chaine vide  si  cette
  103.           variable n'est pas définie.
  104.       pattern      remplacé par le nom de tous les fichiers  correspondant.
  105.           Une "pattern" est un  mot  contenant  au  moins  un  des
  106.           méta-caractères ARP, dont la syntaxe est :
  107.  
  108.           ?          n'importe quel caractère
  109.           #c          n'importe quel nombre de fois (même zéro)
  110.                   le caractère c
  111.           #? ou *     n'importe quelle chaine, même vide
  112.           [liste]     n'importe lequel des caractères indiqués
  113.           (exp1|exp2) exp1 ou exp2
  114.           ~exp          tout sauf exp
  115.  
  116.       {expr}      remplacé par la valeur de l'expression (voir la  syntaxe
  117.           plus loin).
  118.       !!      remplacé par la dernière commande dans l'historique.
  119.       !n      remplacé par la commande numéro "n" dans l'historique.
  120.       !chaine      remplacé par la dernière commande commençant par
  121.           "chaine" dans l'historique.
  122.       `cmd`       remplacé par la première ligne produite en sortie par la
  123.           commande indiquée. Les espaces  en  tête  sont  éliminés
  124.           avant remplacement, la ligne est considéré comme un seul
  125.           argument et n'est pas ré-interprété.
  126.           Exemple : la commande "set toto `type config`" copie  le
  127.           contenu de la première ligne du fichier "config" dans la
  128.           variable locale "toto".
  129.       \car      copie le caractère indiqué sans l'interpréter.
  130.       'chaine'    copie la chaine sans interprétation (à part de la  forme
  131.           "\car").
  132.       "chaine"    copie la chaine sans interprétation, à part  des  formes
  133.           "^car", "=n",  "$var",  "{expr}"  et  "\car".  De  plus,
  134.           l'extension des "patterns" n'est pas désactivée.
  135.  
  136.       AUSH est également capable de rediriger l'entrée ou la sortie  d'une
  137.   commande : au lieu de se faire sur la fenêtre courante, elle se fera sur  le
  138.   fichier indiqué. La syntaxe à respecter est la suivante :
  139.  
  140.       >nom      redirection de la  sortie  vers  le  fichier    "nom".  Le
  141.           fichier est écrasé s'il existe déjà, créé sinon.
  142.       >>nom      redirection de la  sortie  vers  le  fichier    "nom".  La
  143.           sortie est ajoutée à la  fin    du  fichier  s'il  existe,
  144.           sinon le fichier est créé.
  145.       <nom      redirection de l'entrée depuis le fichier "nom".
  146.  
  147.       La spécification de ces redirections peut se faire n'importe où  sur
  148.   la ligne de commande. Il peut y avoir un  ou    plusieurs  espaces  entre  les
  149.   caractères  de  redirection  et  le  nom  de    fichier  (comme  par   exemple
  150.   "list > maliste").
  151.  
  152.       Une commande complexe est composée d'au moins deux commandes simples
  153.   enchainées par une des formes suivantes :
  154.  
  155.       cmd1|cmd2|...   exécution  successive  de  commandes  simples,  avec
  156.               "pipes" (la  sortie  de  la  commande  à  gauche  du
  157.               caractère "|"  est  utilisée  comme  entrée  par  la
  158.               commande indiquée à droite), tant que le code retour
  159.               est nul.
  160.       cmd1,cmd2,...   exécution successive de commandes, tant que le  code
  161.               retour est nul. Vous pouvez spécifier des  commandes
  162.               simples, mais aussi des enchainements par pipes (par
  163.               exemple "cd ram: , list | wc , delete toto").
  164.  
  165.       Le code retour d'une commande complexe  est  celui  de  la  dernière
  166.   commande simple exécutée. Seule la dernière commande simple  d'une  commande
  167.   complexe peut être lancée en arrière plan.
  168.  
  169.       Une fois l'analyse de la ligne  de  commande  terminée,  AUSH  lance
  170.   l'exécution de la commande correspondante. La recherche se fait d'abord dans
  171.   la liste des commandes internes au shell, puis dans la liste    des  commandes
  172.   résidentes, et enfin dans les répertoires  indiqués  à  l'aide  la  commande
  173.   "Path". Une fois la commande lancée, AUSH attend la fin  de  son  exécution,
  174.   met à jour certaines variables (comme celle indiquant le code retour  de  la
  175.   dernière commande exécutée) puis affiche de nouveau la chaine d'invite.
  176.       Vous pouvez demander une exécution en arrière plan, c'est-à-dire que
  177.   AUSH n'attendra pas la fin de la commande. Il vous faudra alors spécifier le
  178.   caractère "&" sur la ligne de commande (par exemple "list >maliste  &").  Le
  179.   shell affichera alors le numéro de  processus  de  cette  commande  puis  le
  180.   prompt ré-apparaitra immédiatement.
  181.       Par défaut, les commandes héritent de la  priorité  du  shell,  mais
  182.   AUSH vous permet de modifier temporairement cette priorité. Ainsi,  si  vous
  183.   tapez une ligne de la forme "cmd @n", la  commande  indiquée  sera  exécutée
  184.   avec la priorité "n" (par exemple "list @-3" lancera la commande "list" avec
  185.   la priorité -3). Ceci ne marchera cependant pas pour les commandes internes.
  186.   De même, lors du lancement en arrière plan,  vous  pouvez  faire  suivre  le
  187.   caractère "&" par la priorité à donner à la  commande.  Par  exemple,  "list
  188.   >maliste &5" lancera la commande "list" en arrière plan, avec la priorité 5.
  189.       Notez que les spécifications    "&"  et  "@"  peuvent  être  indiquées
  190.   n'importe où sur la ligne de commande.
  191.  
  192.   6. Les variables
  193.  
  194.       AUSH vous permet de définir des variables, comme dans un langage  de
  195.   programmation classique. Les caractères autorisés pour les noms de variables
  196.   sont les lettres minuscules et majuscules, les  chiffres,  et  le  caractère
  197.   souligné.  Notez   que   minuscules    et   majuscules   sont     différenciées
  198.   (contrairement  aux  noms  de  fichiers).  Ces  variables  peuvent  contenir
  199.   n'importe quelle valeur, aussi bien numérique que alphanumérique.
  200.       Les  variables  globales  sont  accessibles  à  tous     les   niveaux
  201.   d'exécution, c'est-à-dire  aussi  bien  en  mode  interactif  que  dans  les
  202.   fichiers de commandes. Elles ne  peuvent  être  détruites.  Notez  qu'il  ne
  203.   s'agit pas des variables au  sens  ARP  ou  Commodore.  Elles  ne  sont  pas
  204.   partagées par plusieurs shells.
  205.       Une variables locale n'est accessible que dans le niveau d'exécution
  206.   où elle a été définie pour la  première  fois.  Lors    du  retour  au    niveau
  207.   précédent, les variables locales sont détruites automatiquement.
  208.       Certaines variables permettent de contrôler et de  paramètrer  AUSH.
  209.   Ces variables sont décrites plus loin.
  210.  
  211.   7. Expressions
  212.  
  213.       AUSH peut évaluer des expressions entières,  exprimées  en  notation
  214.   polonaise inversée postfixée. Vous pouvez utiliser des variables locales  ou
  215.   globales dans ces expressions, si leurs  valeurs  sont  numériques.  Il  est
  216.   possible d'indiquer des nombres hexadécimaux (précédés par "0x", par exemple
  217.   "0x13e"). Par défaut le résultat est en  décimal.  Les  opérateurs  reconnus
  218.   sont :
  219.  
  220.       +      addition
  221.       -      soustraction
  222.       *      multiplication
  223.       /      division
  224.       %      modulo (reste de la division entière)
  225.       <      décalage à gauche
  226.       >      décalage à droite
  227.       &      et
  228.       |      ou
  229.       sx      dépile le sommet de pile dans le registre x
  230.       lx      empile le contenu du registre x
  231.       HEX      affiche le résultat en hexadécimal
  232.  
  233.       Il y a dix registres (désignés par un chiffre de 0 à 9)  initialisés
  234.   à zéro au  démarrage    du  shell.  Ils  conservent  leur  valeur  entre  deux
  235.   évaluations d'expression. Les nombres et les opérateurs doivent être séparés
  236.   par au moins un espace, sauf le - unaire (négation).
  237.  
  238.   Exemples :
  239.  
  240.       echo { 34 3 / 4 + } => 15
  241.       echo { 7 3 - }      => 4
  242.       echo { 10 -2 + }    => 8
  243.  
  244.       set cpt 3
  245.       echo { $cpt 2 * }   => 6
  246.       set cpt { $cpt 1 + }
  247.       echo $cpt          => 4
  248.  
  249.   8. Les fichiers de commandes
  250.  
  251.       Vous pouvez regrouper plusieurs commandes dans  un  fichier,    et  le
  252.   faire exécuter par AUSH comme un programme quelconque. Tout ce passera alors
  253.   comme si vous aviez tapé cette suite de commandes au clavier, à part sur  le
  254.   plan des variables locales.
  255.       Dans un fichier de commandes, la variable locale "argc"  indique  le
  256.   nombre d'arguments reçus. AUSH  positionne  également  des  pseudo-variables
  257.   locales (elles n'apparaissent pas dans la liste des variables données par la
  258.   commande "set", et ne peuvent être modifiées) : la variable "0" contient  le
  259.   nom du fichier de commandes,    les  variables    "1",  "2",...  les  différents
  260.   arguments, et la variable "*" la liste des  arguments  (à  partir  de  "$1")
  261.   séparés par un espace.
  262.       Chaque  fois    que  vous  lancez  AUSH,  le  fichier    de   commandes
  263.   "S:.aushrc" est exécuté (s'il existe).
  264.  
  265.   9. Gestion de l'historique
  266.  
  267.       AUSH peut mémoriser vos commandes, et vous permettre de les rappeler
  268.   par la suite. Le  mécanisme  d'historique,  qui  ne  fonctionne  qu'en  mode
  269.   interactif, est contrôlé par la variable "history" (qui indique le nombre de
  270.   commandes à conserver). La  commande    "history"  (décrite  plus  loin)  vous
  271.   permet de voir le contenu de l'historique.
  272.  
  273.       La variable "savehist" indique le nombre de commandes sauvées  entre
  274.   chaque exécution d'un shell. Ce fichier (généré lors de  la  terminaison  du
  275.   shell) est automatiquement chargé lors du démarrage, et les commandes  qu'il
  276.   contient sont copiées dans l'historique. La variable  "histfile"  peut  être
  277.   définie, pour indiquer le nom  du  fichier  de  sauvegarde.  Par  défaut  ce
  278.   fichier est "S:.history".
  279.  
  280.   10. Edition de la ligne de commandes
  281.  
  282.       Ce mécanisme permet de se passer du gestionnaire de console  NewCON.
  283.   Il est activé en affectant la valeur "1"  à  la  variable  "lineedit".  Vous
  284.   pouvez alors utiliser les  touches  suivantes  pour  éditer  vos  lignes  de
  285.   commande :
  286.  
  287.     gauche         caractère précédent.
  288.     droite         caractère suivant.
  289.     shift-gauche mot précédent.
  290.     shift-droit  mot suivant.
  291.     shift-haut   dernière commande commençant par la ligne courante.
  292.     haut         commande précédente dans l'historique.
  293.     bas         commande suivante dans l'historique.
  294.     ^A         va en début de ligne.
  295.     ^B         caractère précédent.
  296.     ^E         va en fin de ligne.
  297.     ^F         caractère suivant.
  298.     ^K         efface la fin de ligne.
  299.     ^L         ré-affiche la ligne.
  300.     ^N         commande suivante dans l'historique.
  301.     ^P         commande précédente dans l'historique.
  302.     ^S         échange les deux caractères précédents.
  303.     ^T         première commande dans l'historique.
  304.     ^W         efface la fin du mot.
  305.     ^X         efface la ligne.
  306.     ^Z         dernière commande dans l'historique.
  307.     RETURN         exécute la commande, après sauvegarde dans l'historique.
  308.     ESC         annule la commande, après sauvegarde dans l'historique.
  309.  
  310.     ^V         le mot précédent est considéré comme un nom de variable
  311.              et est remplacé par la valeur de cette variable.
  312.              Exemple : echo version<^V> => echo 1.10.
  313.     TAB         complète le nom de fichier ou de variable.
  314.              Exemple :     cd ram:
  315.                  list Cl<TAB>  => list ClipBoards/
  316.                  echo $hi<TAB> => echo $history
  317.              S'il y a plusieurs possibilités, AUSH complète le plus
  318.              loin possible et affiche la liste des possibilités.
  319.              Pour compléter un nom de fichier, AUSH lui ajoute le
  320.              contenu de la variable "filepat" et étend la "pattern"
  321.              ainsi obtenue.
  322.     ^D         affiche la liste des possibilités pour compléter le
  323.              nom de fichier ou de variable (sans modifier la ligne
  324.              de commande).
  325.  
  326.     HELP         appelle la requête de fichier. Si vous choisissez un
  327.              fichier, son nom sera ajouté dans la ligne de commande.
  328.  
  329.     f1 à f10     remplacé par la valeur des variables "f1" à "f10", ou
  330.              "F1" à "F10" si shifté.
  331.  
  332.   IMPORTANT: il arrive de temps  en  temps  que  l'éditeur  se  bloque  et  ne
  333.   réagisse plus à ce que vous tapez au clavier. Dans  ce  cas,    il  suffit  en
  334.   général de taper "|" (SHIFT-\) pour le débloquer.
  335.  
  336.   11. Gestion des répertoires
  337.  
  338.       Si vous définissez l'alias "dircmd", cet alias sera  exécuté  chaque
  339.   fois que vous taperez un nom de  répertoire  comme  nom  de  commande  (sans
  340.   argument, redirection, pipe, ni  lancement  en  arrière-plan).  Par  exemple
  341.   "alias dircmd cd" vous permet d'avoir un "cd" implicite : taper le nom  d'un
  342.   répertoire suffit pour y aller. Vous pouvez également définir un alias  plus
  343.   complexe, comme "alias dircmd 'cd [] , list FILES QUICK'".
  344.  
  345.       AUSH peut gérer une pile de répertoire (64  entrées).  L'ajout  d'un
  346.   répertoire ce fait à l'aide la commande  interne  "pushd",  le  retrait  par
  347.   "popd", et l'affichage du contenu de la pile par "dirs" (ces commandes  sont
  348.   décrites plus loin).
  349.       Vous pouvez utiliser cette pile dans vos  commandes  avec  la  forme
  350.   "=n", où "n" est le numéro d'un répertoire dans  la  pile  (indiqué  par  la
  351.   commande "dirs").
  352.  
  353.   12. Commandes internes
  354.  
  355.       Ce chapitre décrit  toutes  les  commandes  internes    de  AUSH.  Ces
  356.   commandes ne peuvent    être  lancées  en  arrière  plan  mais    acceptent  les
  357.   redirections en entrée et en sortie. Elles retournent 0  (RETURN_OK)  ou  20
  358.   (RETURN_FAIL) suivant le cas.
  359.       Lors de l'affichage de la valeur d'une variable  par  les  commandes
  360.   "setvar" ou "set", les attributs  de  cette  variable  sont  affichés  entre
  361.   parenthèses ("x" pour exportable, "r" pour lecture seulement).
  362.  
  363.       alias
  364.       Affiche la liste des alias et leurs définitions.
  365.  
  366.       alias nom
  367.       Affiche la définition de l'alias indiqué.
  368.  
  369.       alias nom 'chaine'
  370.       Défini un alias "nom" de valeur "chaine".  Dans  la  chaine,  le
  371.       symbole  "[]"  indique  où  placer  les  arguments  lors  de  la
  372.       substitution de l'alias. Notez que la chaine  DOIT  être  placée
  373.       entre quotes simples.
  374.  
  375.       cd [rep]
  376.       Sans argument affiche le nom du répertoire courant, sinon  "rep"
  377.       devient le répertoire courant.
  378.  
  379.       dirs
  380.       Affiche le contenu de la pile des répertoires.
  381.  
  382.       echo [-c] [args...]
  383.       Affiche les arguments sur la sortie standard, suivis d'un retour
  384.       chariot sauf si vous indiquez l'option "-c".
  385.  
  386.       eval
  387.       Passe en mode évaluation : toute ligne en  entrée  est  analysée
  388.       comme une expression (voir syntaxe plus  haut)  et  le  résultat
  389.       affiché. Pour sortir de ce mode, tapez "x"  tout  seul  sur  une
  390.       ligne.
  391.  
  392.       exit [code]
  393.       Retourne au niveau d'exécution précédent, avec  le  code  retour
  394.       indiqué (0 par défaut). En mode interactif, termine le shell.
  395.  
  396.       export vars...
  397.       Marque les variables locales indiquées comme "exportables".  Ces
  398.       variables deviennent alors lisibles, modifiables et détruisibles
  399.       dans    les  fichiers  de  commandes  lancés  depuis   le   niveau
  400.       d'exécution courant.
  401.  
  402.       for var in val1 val2... valn
  403.       ...
  404.       done
  405.       Effectue une    boucle.  La  variable  "var"  (locale)  prend  les
  406.       valeurs indiquées dans  la  liste,  et  pour    chaque    valeur    la
  407.       séquence d'instruction entre le "for" et le "done" est  exécutée
  408.       une fois. Après le "done",  la  variable  contient  la  dernière
  409.       valeur  pour    laquelle  la  boucle  a  été  effectuée.  En  mode
  410.       interactif, le prompt devient  celui    indiqué  par  la  variable
  411.       "prompt3", entre le "for" et le "done".
  412.       Vous pouvez également utiliser la forme  "for  var  in  val1  ..
  413.       val2", qui effectue la boucle pour chaque valeur comprise  entre
  414.       les nombres "val1" et "val2" inclus. Si  le  nombre  "val2"  est
  415.       inférieur au nombre "val1", la boucle est effectué avec  un  pas
  416.       de -1. Les nombres "val1" et "val2" peuvent être négatifs.
  417.  
  418.       history
  419.       Donne la liste des commandes présentes dans l'historique.
  420.  
  421.       if [NOT] condition
  422.       ....
  423.       [else
  424.       ....]
  425.       endif
  426.       Exécution  conditionnelle.  En  mode    "interactif",  la   chaine
  427.       d'invite devient celle indiquée par la variable "prompt2".
  428.       La condition peut être :
  429.  
  430.           -d nom      vrai si "nom" est un répertoire (1)
  431.           -e nom      vrai si "nom" existe (1)
  432.           -f nom      vrai si "nom" est un fichier (1)
  433.           -o nom nom2 vrai si "nom1" et "nom2" existent et que
  434.                   "nom" est plus ancien que "nom2" (1)
  435.           -s nom      vrai si "nom" est un fichier non vide (1)
  436.           str1 = str2 vrai si "str1" est identique à "str2"
  437.           n1 LT n2    vrai si n1 est inférieur n2
  438.           n1 EQ n2    vrai si n1 est égal à n2
  439.           n1 GT n2    vrai si n1 est supérieur n2
  440.           n1 LE n2    vrai si n1 est inférieur ou égal à n2
  441.           n1 NE n2    vrai si n1 est différent de n2
  442.           n1 GE n2    vrai si n1 est supérieur ou égal à n2
  443.  
  444.       Le mot-clé "NOT" avant une  condition  permet  d'inverser  cette
  445.       condition. Jusqu'à 16 commandes "if" peuvent être imbriquées.
  446.  
  447.       (1) Si la lettre après  le  tiret  est  en  majuscule  (exemple:
  448.           "-D"), le test échouera sans requêtes de l'AmigaDOS  en  cas
  449.           de volume absent, lecteur de disquette vide, etc...
  450.  
  451.       jobs
  452.       Affiche la liste des processus lancés en arrière plan.
  453.  
  454.       loadhist
  455.       Force le chargement immédiat du fichier  contenant  l'historique
  456.       des commandes. Cette commande peut être utile si vous changez la
  457.       valeur de la variable "histfile" et que vous voulez  prendre  en
  458.       compte le nouveau fichier.
  459.  
  460.       popd [nb]
  461.       Sans arguments dépile le dernier répertoire empilé et en fait le
  462.       répertoire courant, sinon tronque la pile  des  répertoires  aux
  463.       "nb" premiers répertoires ("popd 0" vide complètement la  pile).
  464.  
  465.       pushd rep
  466.       Empile le répertoire courant, puis fait de "rep"  le  répertoire
  467.       courant.
  468.  
  469.       read [-f] var
  470.       Affecte à la variable locale indiquée une ligne lue sur l'entrée
  471.       standard.  Retourne  RETURN_FAIL  en    cas  de  fin  de  fichier.
  472.       L'option -f permet d'interdire la saisie d'une chaine vide.
  473.  
  474.       readonly vars...
  475.       Empêche toute modification ou destruction des variables (locales
  476.       ou globales) indiquées. Cette opération est irréversible.
  477.  
  478.       set
  479.       Affiche la liste des variables locales, ainsi que leur  valeurs.
  480.  
  481.       set var
  482.       Affiche la valeur de la variable locale "var".
  483.  
  484.       set var val
  485.       Affecte la valeur "val" à la variable locale "var". La  variable
  486.       est créée si elle n'existe pas encore.
  487.  
  488.       setvar
  489.       Affiche la liste des variables globales, ainsi que leur valeurs.
  490.  
  491.       setvar var
  492.       Affiche la valeur de la variable globale "var".
  493.  
  494.       setvar var val
  495.       Affecte la valeur "val" à la variable globale "var". La variable
  496.       est créée si elle n'existe pas encore.
  497.  
  498.       shift
  499.       Décale  les  arguments  d'un   fichier   de   commandes   :   la
  500.       pseudo-variable  "1"  reçoit  le  contenu  de   "2",   puis   la
  501.       pseudo-variable "2" celui de "3", etc... La variable  "argc"  et
  502.       la pseudo-variable "*" sont mises à jour.
  503.  
  504.       source fichier
  505.       Exécute le fichier de commandes indiqué. Si  vous  redirigez    la
  506.       sortie de cette commande, la redirection concernera  toutes  les
  507.       commandes du fichier.
  508.  
  509.       stop [code]
  510.       Interrompt l'exécution de la boucle "for...done" courante,  avec
  511.       le code retour indiqué (0 par défaut).
  512.  
  513.       time <commande>
  514.       Lance l'exécution de la commande indiquée, puis affiche la durée
  515.       (en secondes) d'exécution de cette commande. Peut  être  utilisé
  516.       pour toutes les commandes, y compris les commandes  internes    et
  517.       les commandes lancées en arrière plan.
  518.  
  519.       unalias noms...
  520.       Détruit les alias indiqués.
  521.  
  522.       unset vars...
  523.       Détruit les variables locales indiquées.
  524.  
  525.       writehist
  526.       Force une sauvegarde immédiate de l'historique.  Cette  commande
  527.       peut être utilisée par exemple avant de lancer un programme  qui
  528.       risque de "planter" votre Amiga.
  529.  
  530.   13. Variables spéciales
  531.  
  532.       Les variables suivantes permettent de  contrôler  et    de  paramétrer
  533.   AUSH. Sauf dans le cas où une valeur initiale est indiquée,  elles  ne  sont
  534.   pas définies au démarrage. Il est recommandé de les définir comme  variables
  535.   globales (c'est d'ailleurs ce que fait AUSH pour celles qui ont  une  valeur
  536.   initiale) ou éventuellement comme variables Commodore/ARP.
  537.  
  538.       cmdnum      numéro de commande, de la forme "_ShellNumber_CmdNumber"
  539.           (garanti différent pour chaque commande exécutée).
  540.       cwd      nom du répertoire courant.
  541.       debug      si vaut "1", trace les  commandes  exécutées  (avant  et
  542.           après première interprétation, utile    pour  la  mise    au
  543.           point des fichiers de commandes).
  544.       delim      caractères délimiteurs de mots pour les  fonctions  "mot
  545.           suivant", "mot précédent" et "efface la fin du  mot"  de
  546.           l'éditeur de la ligne de commande.
  547.           Valeur initiale : " :/".
  548.       filepat      chaine ajoutée au mot en cours pour compléter les nom de
  549.           fichiers.
  550.           Valeur initiale : "#?".
  551.       fullhist      si  vaut  "1",  sauvegarde  toutes  les  commandes  dans
  552.           l'historique, sinon ne sauvegarde pas deux fois de suite
  553.           la même commande.
  554.       histfile      nom du fichier de sauvegarde de l'historique entre  deux
  555.           sessions.  Si  cette     variable   n'est   pas   définie,
  556.           l'historique est sauvegardé dans "S:.history".
  557.       histmin      longueur minimale que doit avoir une commande pour  être
  558.           conservée dans l'historique.
  559.           Valeur initiale : 3.
  560.       history      nombre de commandes conservées dans l'historique (si non
  561.           défini ou inférieur à 1, seule la dernière commande  est
  562.           sauvée).
  563.           Valeur initiale : 50.
  564.       insert      si vaut "1", l'édition de la ligne de commande  se  fait
  565.           en mode "insertion" (mode "remplacement" sinon).
  566.           Valeur initiale : 1.
  567.       ioerror      code d'erreur positionné par la dernière commande  ayant
  568.           échoué (pour l'instant ne marche que pour les  commandes
  569.           internes).
  570.           Valeur initiale : 0.
  571.       language      langue des messages  d'erreurs.  Les  valeurs  reconnues
  572.           sont "english" et "deutsch". Pour toute autre valeur, ou
  573.           si cette variable n'est pas définie, les messages seront
  574.           en français.
  575.       lineedit      si vaut "1", active l'édition de la ligne de commande.
  576.       noexpand      si vaut "1", désactive l'extension des  méta-caractères.
  577.       path      indique le chemin de recherche des commandes à exécuter,
  578.           sous la forme d'une liste de noms de répertoires séparés
  579.           par  un  caractère  ";".  Pour  désigner  le  répertoire
  580.           courant, indiquez "." comme nom  de  répertoire.  Si  un
  581.           fichier  avec  le  bit  "s"  est  trouvé,  une  commande
  582.           "source" est lancée automatiquement sur ce fichier.
  583.           Exemple : setvar path 'ram:;.;c:;sys:utilities'
  584.       prompt      chaine d'invite, interprétée comme suit :
  585.  
  586.               %h      numéro dans l'historique
  587.               %#      numéro du shell
  588.               %i      niveau d'imbrication des "if"
  589.               %l      niveau d'imbrication de boucle
  590.               %c      nom du répertoire courant (variable "cwd")
  591.               %s      dernier code retour (variable "status")
  592.               %Vnom   valeur de la variable "nom".
  593.               %T      heure (HH:MM:SS)
  594.               %d      jour du mois (1-31)
  595.               %D      jour de la semaine (Mon-Sun)
  596.               %m      mois (1-12)
  597.               %M      nom du mois (Jan-Dec)
  598.               %y      année (1900-1999)
  599.               %C      caractère CSI (0x9B)
  600.               %N      caractère retour chariot
  601.               %f      taille de mémoire FAST libre
  602.               %v      taille de mémoire CHIP libre
  603.               %a      taille de mémoire libre (CHIP+FAST)
  604.  
  605.           Valeur initiale : "%C0;33;40m< %# - %c >%C0;31;40m ".
  606.       prompt2      idem que "prompt", mais utilisé entre "if" et "endif".
  607.           Valeur initiale : "%i> ".
  608.       prompt3      idem que "prompt", mais utilisé entre "for" et "done".
  609.           Valeur initiale : "%l) ".
  610.  
  611.       NOTE : en l'absence de définition, "> " est utilisé comme prompt.
  612.  
  613.       savehist      nombre de commandes sauvées entre chaque session (si non
  614.           défini ou inférieur à 1 rien n'est sauvé).
  615.       status      code retour de la dernière commande exécutée.
  616.       titlebar      idem que "prompt", mais pour  le  titre  de  la  fenêtre
  617.           shell.
  618.       trap      commande(s)  à  exécuter  lors  de  l'interruption  d'un
  619.           fichier de commandes ou d'une  boucle  "for...done"  par
  620.           l'appui sur CTRL-C ou CTRL-D. Contrairement  aux  autres
  621.           variables spéciales, il est conseillé de  définir  cette
  622.           variable localement (commande  "set",  permet  à  chaque
  623.           fichier de commandes de la modifier en fonction  de  ses
  624.           besoins). Il    est  également    conseillé  d'indiquer  une
  625.           commande "exit" comme dernière commande (exemple  :  set
  626.           trap 'delete $tmpfile ,  exit  20'),  sinon  l'exécution
  627.           reprendra au point où elle en était  (pour  ignorer  les
  628.           interruptions : set trap ';'). Si cette  variable  n'est
  629.           pas définie, l'exécution est arrêtée avec un code retour
  630.           de 20.
  631.       version      numéro de version de AUSH.
  632.  
  633.   14. Notes
  634.  
  635.       Sauf si vous lui affectez une pile de plus de 4000 octets  AVANT  de
  636.   le lancer, AUSH ne pourra exécuter  plus  d'une  quinzaine  de  fichiers  de
  637.   commandes et/ou de boucles imbriquées (vous obtiendrez le message "pas assez
  638.   de place dans la pile !").
  639.       Si le nom indiqué pour les redirections en sortie  est  "TTY"  (i.e.
  640.   ">TTY" ou ">>TTY"), la redirection se fait vers la fenêtre  du  shell.  Cela
  641.   peut être utile dans un fichier de commandes, pour afficher un message alors
  642.   que la sortie de toutes les commandes a été redirigée vers un fichier.
  643.       Les pipes sont gérés à l'aide de fichiers temporaires créés dans  le
  644.   répertoire "T:", les tentatives  d'utilisation  de  "PIPE:"  et  "FIFO:"  se
  645.   soldant pour l'instant par un Gourou dès que plus  de  deux  commandes  sont
  646.   enchainées. Le répertoire  "T:"  est  également  utilisé  pour  stocker  des
  647.   fichiers temporaires lors des substitutions de commandes et  de  l'exécution
  648.   des boucles "for...done".
  649.       La forme "cmd  &"  correspond  à  la  forme  "run  cmd"  des  shells
  650.   Commodore et ARP. Notez que AUSH attend  la  fin  de    toutes    les  commandes
  651.   lancées en arrière plan avant de terminer. La commande "jobs" vous permettra
  652.   de savoir quelles sont ces commandes.
  653.       Sous système 2.04, AUSH n'est  pas  capable  de  récupérer  le  code
  654.   retour d'une commande lancée en arrière plan.
  655.  
  656.   15. Historique
  657.  
  658.     v1.00   28-Feb-92, 29564 octets
  659.         o Première version diffusée.
  660.  
  661.     v1.10   28-Mar-92, 31828 octets
  662.         o Cherche les variables également dans les variables ARP/Commodore
  663.           et Manx.
  664.         o La touche "^D" affiche les possibilités pour compléter le nom de
  665.           fichier ou de variable, les touches "^B",  "^F",  "^N"  et  "^P"
  666.           font la même chose que "gauche", "droite", "bas" et "haut".
  667.         o L'éditeur de ligne de commande efface le curseur  pendant  qu'il
  668.           exécute une commande (affichage plus rapide).
  669.         o La requête de fichier récupère le mot en cours pour  initialiser
  670.           le répertoire initial de la requête.
  671.         o Remet à zéro les signaux SIGBREAKF en  retour  de  l'éditeur  de
  672.           ligne de commandes (car ils sont positionnés si on  utilise  ^D,
  673.           ^E, ou ^F).
  674.         o Les  formes  "!!",  "!n"  et  "!chaine"  peuvent  être  indiquée
  675.           n'importe où sur la ligne de commande.
  676.         o Ajout des formes -D, -E, et -F à la commande "if".
  677.         o Ajout de la forme "for var in val1 ..  val2"  pour  la  commande
  678.           "for...done".
  679.         o Ajout de l'alias "dircmd".
  680.         o Ajoute un espace après une définition d'alias sans arguments (si
  681.           on faisait "alias ls dir" puis "ls ram:"  on  avait  un  message
  682.           "Please insert volume dirram: in any drive").
  683.         o Messages d'erreur en allemand si  la  variable  "language"  vaut
  684.           "deutsch".
  685.         o Commande "setenv" renommée en "setvar" (plus de conflits avec la
  686.           commande de Commodore), ajout de la commande "echo".
  687.         o Ajout des variables  "version"  et  "path",  variable  "ioerror"
  688.           initialisée à "0", variable "insert" initialisée à "1", variable
  689.           "autocd" supprimée.
  690.  
  691.     v1.11   29-Mar-92, 31832 octets
  692.         o La commande "echo" tient compte des redirections en sorties
  693.  
  694.     v1.12   11-Apr-92, 32244 octets
  695.         o Charge l'historique après l'exécution de  "S:.aushrc",  afin  de
  696.           prendre en compte une éventuelle modification de la valeur de la
  697.           variable "history".
  698.         o Ajout des formes "NE", "LE", et "GE" à la commande "if".
  699.         o La forme "for i in val1 .. val2" accepte des nombres négatifs et
  700.           que "val2" soit inférieur à "val1".
  701.         o Plus de contrôle de la taille des arguments pour    les  commandes
  702.           internes.
  703.         o Ajout de la fonction "^V" à l'éditeur de ligne de commandes.
  704.  
  705.     v1.13   18-Apr-92, 32280 octets
  706.         o Lors de la recherche d'une commande  à  l'aide  de  la  variable
  707.           "path" vérifie que l'objet trouvé est bien un fichier (et non un
  708.           répertoire).
  709.  
  710.     v1.14   26-Apr-92, 32300 octets
  711.         o Deux erreurs  corrigées  dans  la  substitution  de  commande  :
  712.           n'éliminait  pas  le  "`"  final,  calcul  de  la  longueur  des
  713.           arguments incorrect.
  714.         o Une erreur corrigée dans le parser : interprétait quand même les
  715.           caractères "<>,;" s'ils étaient en première  position  dans  une
  716.           chaine entre quotes.
  717.         o Messages en allemands revus
  718.  
  719.     v1.15   01-May-92, 32364 octets
  720.         o Ajout de la variable "histfile".
  721.         o Deux erreurs  corrigées  dans  le  calcul  de  la  longueur  des
  722.           arguments : oubliait de compter les guillements ou  les  quotes,
  723.           et de prévoir un peu de place supplémentaire pour les  arguments
  724.           "splités".
  725.  
  726.     v1.16   11-May-92, 32404 octets
  727.         o commande "echo" revue  :  quand  on  met  l'option  -c  supprime
  728.           vraiment le '\n' final (i.e. ne le remplace pas par un espace)
  729.  
  730.     v1.20   16-May-92, 32568 octets
  731.         o ajout des commandes "loadhist" et "writehist"
  732.         o ajout de la forme "%Vnom" à la syntaxe du prompt
  733.         o modification du "parser" :  n'analyse  la  partie  droite  d'une
  734.           commande composée qu'après avoir exécuté la  partie  gauche,  et
  735.           donc :
  736.           - "cd ram: , delete *" donne  le  résultat  attendu  ("*"  était
  737.         étendu avant de faire le "cd")
  738.           - toutes les commandes simples peuvent être des  alias  (et  non
  739.         plus seulement la première)
  740.           - on peut écrire une boucle sur une seule ligne ("for i in 1  ..
  741.         50 , echo $i , done" ne  marchait  pas,  maintenant  même  "cd
  742.         ram: , for i in *.c , echo $i , compress  $i  ,  done  ,  echo
  743.         fini" fonctionne !)
  744.  
  745.     v1.21   17-May-92, 32912 octets
  746.         o ajout de la commande "time"
  747.  
  748.     v1.22   23-May-92, 32944 octets
  749.         o bug corrigé dans la gestion des boucles "for...done" :  lors  de
  750.           l'écriture des commandes dans le fichier temporaire, ne  forçait
  751.           pas une fin de ligne après chaque commande
  752.  
  753.     v1.23   01-Jun-92, 33328 octets
  754.         o Plusieurs bugs corrigés dans la gestion des boucles "for...done"
  755.           écrites sur une même ligne : "for i  in  1  ..  5,echo  $i,done"
  756.           marche, ainsi que "for i in 1 .. 5 , list | wc , done"
  757.         o Si trouve un fichier avec le bit "s" en cherchant  une  commande
  758.           dans  le    chemin    défini     par   la   variable   "path",   lance
  759.           automatiquement une commande "source" sur ce fichier.
  760.         o La touche "^S" échange les deux caractères précédant le curseur.
  761.         o Les touches "^D" et "<TAB>" sont utilisables  sans  préfixe,  et
  762.           donc en début de ligne ou après un espace.
  763.         o Bug corrigé dans    l'éditeur  de  ligne  de  commande:  après  un
  764.           "shift-haut", les touches "haut" et "bas" ne donnaient  pas  les
  765.           bonnes commandes.
  766.  
  767.     v1.30   14-Jun-92, 33932 octets
  768.         o Plusieurs  erreurs  détectées  par  "Enforcer"   et   "Mungwall"
  769.           corrigées.
  770.         o Bug corrigé dans la  commande  "shift"  :  ne  positionnait  pas
  771.           "argc" correctement.
  772.         o Reconnait "$*" (remplacé par la liste des arguments séparés  par
  773.           un espace).
  774.         o Ajout de l'option -f à la commande "read".
  775.         o La variable "argc" est en lecture seulement.
  776.         o Vérifie les noms de  variables  donnés  aux  commandes  internes
  777.           (interdit les pseudo-variables arguments).
  778.         o Les spécifications "&[pri]" et  "@pri"  peuvent  être  indiquées
  779.           n'importe où sur la ligne de commande.
  780.  
  781.     v1.40   26-Jun-92, 37764 octets
  782.         o Recompilé avec le SAS/C 5.10b (avec pragmas et optimisation)
  783.         o Peut être rendu résident (code "pure")
  784.         o Enorme bug corrigé dans la fonction strxcat()  (ne  sauvegardait
  785.           pas le registre a2)
  786.         o Nombreuses modifications pour mieux tenir compte de  la  version
  787.           du système, ainsi sous système 2.04 :
  788.         - n'a plus besoin de "arp.library"
  789.         - peut exécuter les programmes résidents/internes (ROM)
  790.         - la commande "Execute" peut être utilisée
  791.         o Modification de l'évaluateur d'expressions :
  792.           - on peut indiquer des valeurs en hexa (0x1FD)
  793.           - ajout des opérateurs "HEX", "<", ">", "&", et "|"
  794.         o Ajout de l'option "-o" à la commande "if"
  795.         o Bug corrigé dans la  commande  "if":  n'appelait  UnLock()  dans
  796.           certains cas d'erreur
  797.  
  798.     v1.41   30-Jun-92, 37864 octets
  799.         o Correction dans la recherche des commandes: ne cherche  plus  le
  800.           chemin si la commande est résidente
  801.  
  802.     v1.42   06-Jul-92, 37872 octets
  803.         o Bug corrigé dans la gestion des boucles "for...done": "oubliait"
  804.           les redirections des commandes dans la boucle
  805.         o Ne fait plus  crier  "Enforcer"  quand  on  fait  "!string"  (ou
  806.           "shift-haut" dans l'éditeur de lignes de commandes) et qu'aucune
  807.           commande commençant par "string" ne se trouve dans  l'historique
  808.  
  809.